home *** CD-ROM | disk | FTP | other *** search
/ Game.EXE 2001 January / Game.EXE_01_2001.iso / demos / Blade of Darkness / data1.cab / Program_Executable_Files / Lib / GenFX.py < prev    next >
Encoding:
Text File  |  2000-11-16  |  29.9 KB  |  711 lines

  1. import Bladex
  2. import AuxFuncs
  3. import whrandom
  4. import InitDataField
  5. import GameStateAux
  6. import Auras
  7. import Objects
  8. import CharStats
  9. import ObjStore
  10.  
  11.  
  12.  
  13.  
  14. ############################################
  15. #     Level effects y cosas del estilo     #
  16. ############################################
  17.  
  18.  
  19. def LevelUpFX(EntityName, ColourGradation, AuraParams, AuraGradient, AuraVar1Args, AuraVar2Args, PSParams, LightIntensity, timer="Timer15", timespersec=15, sound=""):
  20.  
  21.     # ColourGradation=0/1
  22.     # AuraParams=(Size, Alpha, ColourIntensity, HideFrontFaces, HideBackFaces, AlphaMode)
  23.     # AuraGradient=(Gap, r1, g1, b1, alpha1, StartingPoint, r2, g2, b2, alpha2, EndingPoint)
  24.     # AuraVarArgs=(init_size, end_size, init_alpha, end_alpha, time)
  25.     # PSParams=(LevelUpParticleData, ParticleType, ParticleLife, r, g, b, PPS, YGravity, Friction, RandomVelocity, NormalVelocity, FollowFactor, Time2Live, DeathTime)
  26.  
  27.     ent=Bladex.GetEntity(EntityName)
  28.     if ColourGradation:
  29.         l=ent.Level
  30.         if ent.Level>20:
  31.             r=255
  32.             g=255*((29.0-l)/8.0) # 255->0
  33.             b=0
  34.         elif ent.Level>13:
  35.             r=255*((l-14.0)/6.0) # 0->255
  36.             g=255
  37.             b=0
  38.         elif ent.Level>6:
  39.             r=0
  40.             g=255
  41.             b=255*((13.0-l)/6.0) # 255->0
  42.         else:
  43.             r=0
  44.             g=255*(l/6.0) # 0->255
  45.             b=255
  46.         AuraGradient=(AuraGradient[0], r/255.0, g/255.0, b/255.0, AuraGradient[4], AuraGradient[5], r/255.0, g/255.0, b/255.0, AuraGradient[9], AuraGradient[10])
  47.     else:
  48.         r=PSParams[3]
  49.         g=PSParams[4]
  50.         b=PSParams[5]
  51.     LevelUpParticleData=PSParams[0]
  52.     for i in range(PSParams[2]):
  53.         Bladex.SetParticleGVal(PSParams[1], i, r, g, b, LevelUpParticleData[2*i], LevelUpParticleData[2*i+1])
  54.     AuraName=EntityName+"AuraLevelUp"
  55.     a2, b2, c2, d2, e2, f2, g2, h2, i2, j2, k2=AuraName, AuraVar2Args[0], AuraVar2Args[1], AuraVar2Args[2], AuraVar2Args[3], AuraVar2Args[4], 1, "", (), timer, timespersec
  56.     a1, b1, c1, d1, e1, f1, g1, h1, i1, j1, k1=AuraName, AuraVar1Args[0], AuraVar1Args[1], AuraVar1Args[2], AuraVar1Args[3], AuraVar1Args[4], 0, AuxFuncs.FadeAndScaleAura, (a2, b2, c2, d2, e2, f2, g2, h2, i2, j2, k2), timer, timespersec
  57.     alup=Bladex.CreateEntity(AuraName, "Entity Aura", 0, 0, 0)
  58.     alup.SetAuraParams(AuraParams[0], AuraParams[1], AuraParams[2], AuraParams[3], AuraParams[4], AuraParams[5])
  59.     alup.SetAuraGradient(AuraGradient[0], AuraGradient[1], AuraGradient[2], AuraGradient[3], AuraGradient[4], AuraGradient[5], AuraGradient[6], AuraGradient[7], AuraGradient[8], AuraGradient[9], AuraGradient[10])
  60.     ent.Link(alup)
  61.     alup.SetAuraActive(1)
  62.     AuxFuncs.FadeAndScaleAura(a1, b1, c1, d1, e1, f1, g1, h1, i1, j1, k1)
  63.     PSName=EntityName+"PSLevelUp"
  64.     pslup=Bladex.CreateEntity(PSName, "Entity Particle System Dperson", 0, 0, 0)
  65.     pslup.PersonName=EntityName
  66.     pslup.ParticleType=PSParams[1]
  67.     pslup.PPS=PSParams[6]
  68.     pslup.YGravity=PSParams[7]
  69.     pslup.Friction=PSParams[8]
  70.     pslup.RandomVelocity=PSParams[9]
  71.     pslup.NormalVelocity=PSParams[10]
  72.     pslup.FollowFactor=PSParams[11]
  73.     pslup.Time2Live=PSParams[12]
  74.     pslup.Velocity=0.0, 0.0, 0.0
  75.     pslup.DeathTime=Bladex.GetTime()+PSParams[13]
  76.     LightName=EntityName+"LightLevelUp"
  77.     llup=Bladex.CreateEntity(LightName, "Entity Spot", 0, 0, 0)
  78.     llup.Color=r, g, b
  79.     llup.Intensity=0.0
  80.     llup.Precission=0.01
  81.     llup.CastShadows=0
  82.     llup.Visible=0
  83.     llup.Flick=0
  84.     ent.Link(llup)
  85.     AuxFuncs.SpotIntensityVariation(LightName, 0.0, LightIntensity, f1/1.6, 0, 0.0, 0.0, timer, timespersec)
  86.     Bladex.AddScheduledFunc(Bladex.GetTime()+f1, AuxFuncs.SpotIntensityVariation, (LightName, LightIntensity, 0.0, f2/1.2, 1, 0.0, 0.0, timer, timespersec))
  87.     if sound:
  88.         soundlup=Bladex.CreateSound(sound,EntityName+"SoundLevelUp")
  89.         soundlup.MinDistance=10000
  90.         soundlup.MaxDistance=20000
  91.         soundlup.PlayStereo()
  92.  
  93.  
  94. def ChangeNodesElectricDischarge(person_name, ray_name, list_of_nodes, timespersec, endtime):
  95.     person=Bladex.GetEntity(person_name)
  96.     ray=Bladex.GetEntity(ray_name)
  97.     n1=whrandom.randint(0, len(list_of_nodes)-1)
  98.     n2=whrandom.randint(0, len(list_of_nodes)-1)
  99.     while n1==n2:
  100.         n2=whrandom.randint(0, len(list_of_nodes)-1)
  101.     node1=list_of_nodes[n1]
  102.     node2=list_of_nodes[n2]
  103.     ray.Position=person.Rel2AbsPoint(0, 0, 0, node1)
  104.     ray.Target=person.Rel2AbsPoint(0, 0, 0, node2)
  105.     if Bladex.GetTime()>endtime:
  106.         Bladex.AddScheduledFunc(Bladex.GetTime()+1.0/timespersec, ray.SubscribeToList, ("Pin",))
  107.     else:
  108.         Bladex.AddScheduledFunc(Bladex.GetTime()+1.0/timespersec, ChangeNodesElectricDischarge, (person_name, ray_name, list_of_nodes, timespersec, endtime))
  109.  
  110. def ElectricDischarge(person_name, ray_name, r, g, b, amplitude, list_of_nodes, timespersec, time):
  111.     person=Bladex.GetEntity(person_name)
  112.     ray=Bladex.CreateEntity(ray_name, "Entity ElectricBolt", 0, 0, 0)
  113.     ray.Target=0, 0, 0
  114.     ray.FixedTarget=0
  115.     ray.MaxAmplitude=amplitude
  116.     ray.MinSectorLength=10000
  117.     ray.CoreGlowColor=r, g, b
  118.     ray.InnerGlowColor=r/2, g/2, b/2
  119.     ray.OuterGlowColor=0.0, 0.0, 0.0
  120.     ray.Damage=0
  121.     ray.Active=1
  122.     n1=whrandom.randint(0, len(list_of_nodes)-1)
  123.     n2=whrandom.randint(0, len(list_of_nodes)-1)
  124.     while n1==n2:
  125.         n2=whrandom.randint(0, len(list_of_nodes)-1)
  126.     node1=list_of_nodes[n1]
  127.     node2=list_of_nodes[n2]
  128.     ray.Position=person.Rel2AbsPoint(0, 0, 0, node1)
  129.     ray.Target=person.Rel2AbsPoint(0, 0, 0, node2)
  130.     endtime=Bladex.GetTime()+time
  131.     Bladex.AddScheduledFunc(Bladex.GetTime()+1.0/timespersec, ChangeNodesElectricDischarge, (person_name, ray_name, list_of_nodes, timespersec, endtime))
  132.  
  133.  
  134.  
  135.  
  136. #############################################
  137. #     Efectos visuales de algunas armas     #
  138. #############################################
  139.  
  140.  
  141. class WeaponFX:
  142.  
  143.     def __init__(self, WeaponName, auraparams, auragradient, prtldata, lightdata):
  144.         self.ObjId= ObjStore.GetNewId()
  145.         ObjStore.ObjectsStore[self.ObjId]= self
  146.         weapon=Bladex.GetEntity(WeaponName)
  147.         self.WeaponName=WeaponName
  148.         self.Aura=None
  149.         self.Particles=None
  150.         self.Light=None
  151.         if auraparams:
  152.             s, a, ci, f, b, am=auraparams
  153.             m, r1, g1, b1, a1, imd, r2, g2, b2, a2, emd=auragradient
  154.             self.Aura=Bladex.CreateEntity(WeaponName+"Aura", "Entity Aura", 0, 0, 0)
  155.             self.Aura.SetAuraParams(s, a, ci, f, b, am)
  156.             self.Aura.SetAuraGradient(m, r1, g1, b1, a1, imd, r2, g2, b2, a2, emd)
  157.             weapon.Link(self.Aura)
  158.             self.Aura.SetAuraActive(1)
  159.         if prtldata:
  160.             pt, pps, v, nv, rv, g, fr, ff, t2l=prtldata
  161.             self.Particles=Bladex.CreateEntity(WeaponName+"Particles", "Entity Particle System Dobj", 0, 0, 0)
  162.             self.Particles.ObjectName=WeaponName
  163.             self.Particles.ParticleType=pt
  164.             self.Particles.PPS=pps
  165.             self.Particles.Velocity=v
  166.             self.Particles.NormalVelocity=nv
  167.             self.Particles.RandomVelocity=rv
  168.             self.Particles.YGravity=g
  169.             self.Particles.Friction=fr
  170.             self.Particles.FollowFactor=ff
  171.             self.Particles.Time2Live=t2l
  172.         if lightdata:
  173.             i, color, fl=lightdata
  174.             self.Light=Bladex.CreateEntity(WeaponName+"Light", "Entity Spot", 0, 0, 0)
  175.             self.Light.Intensity=i
  176.             self.Light.Color=color
  177.             self.Light.Flick=fl
  178.             self.Light.CastShadows=0
  179.             self.Light.Visible=0
  180.             weapon.Link(self.Light)
  181.  
  182.     def __del__(self):
  183.         del ObjStore.ObjectsStore[self.ObjId]
  184.  
  185.     def persistent_id(self):
  186.         return self.ObjId
  187.  
  188.     def __getstate__(self):
  189.         return (1,
  190.                 self.ObjId,
  191.                 self.WeaponName,
  192.                 GameStateAux.SaveEntityAux(self.Aura),
  193.                 GameStateAux.SaveEntityAux(self.Particles),
  194.                 GameStateAux.SaveEntityAux(self.Light)
  195.             )
  196.  
  197.  
  198.     def __setstate__(self,parm):
  199.         print "GenFX.__setstate__()",parm
  200.         if parm[0]==1:
  201.             self.ObjId= parm[1]
  202.             ObjStore.ObjectsStore[self.ObjId]=self
  203.             self.WeaponName=parm[2]
  204.             self.Aura=GameStateAux.LoadEntityAux(parm[3])
  205.             self.Particles=GameStateAux.LoadEntityAux(parm[4])
  206.             self.Light=GameStateAux.LoadEntityAux(parm[5])
  207.         else:
  208.             print "WeaponFX.__setstate__() -> Version mismatch"
  209.             self.WeaponName=""
  210.             self.Aura=""
  211.             self.Particles=""
  212.             self.Light=""
  213.             self.ObjId= ObjStore.GetNewId()
  214.             ObjStore.ObjectsStore[self.ObjId]=self
  215.  
  216.  
  217.  
  218. def AddWeaponFX(WeaponName, data):
  219.     weapon=Bladex.GetEntity(WeaponName)
  220.     if not weapon:
  221.         print "El arma especificada no existe!"
  222.         return
  223.     if not data:
  224.         InitDataField.Initialise(weapon)
  225.         data= weapon.Data
  226.  
  227.     if weapon.Kind in ("QueenSword", "VampWeapon"):
  228.         auraparams=(80, 1, 1, 0, 0, 0) # (Size, Alpha, ColorIntensity, HideFrontFaces, HideBackFaces, AdditiveMode)
  229.         auragradient=(2, 0.8, 0.1, 0.1, 0.2, 0.0, 0.4, 0.0, 0.0, 0.0, 0.6) # (Margin, r, g, b, a, InitMarginDistance, r, g, b, a, EndMarginDistance)
  230.         if weapon.Kind=="VampWeapon":
  231.             prtldata=("GotasSangre", 20, (0.0, 0.0, 0.0), 0.0, 0.0, 2000.0, 0.01, 0.0, 24) # (PrtlType, PPS, Vel=(v1, v2, v3), NormalVel, RndVel, YGrav, Friction, FollowFactor, Time2Live)
  232.         else:
  233.             prtldata=()
  234.         lightdata=() # (Intensity, Color=(r, g, b), Flick)
  235.     elif weapon.Kind in ("CrushHammer", "DalWeapon", "SteelFeather"):
  236.         auraparams=(80, 1, 1, 0, 0, 0)
  237.         auragradient=(2, 0.5, 0.6, 0.0, 0.2, 0.0, 0.2, 0.3, 0.0, 0.1, 0.5)
  238.         prtldata=("GasVenenoso", 30, (0.0, 0.0, 0.0), 0.0, 1.0, 0.0, 0.02, 0.0, 60)
  239.         lightdata=()
  240.     elif weapon.Kind in ("FireBigSword", "FireAxe", "FireSword", "FireBo"):
  241.         auraparams=(40, 1, 1, 0, 0, 1)
  242.         auragradient=(2, 0.8, 0.6, 0.0, 0.6, 0.0, 0.8, 0.1, 0.0, 0.0, 0.6)
  243.         prtldata=("Llamita", 400, (0.0, 0.0, 0.0), 1.0, 0.0, -1000.0, 0.02, 0.0, 10)
  244.         lightdata=(1.0, (255, 120, 0), 1)
  245.         weapon.SelfIlum=0.8
  246.     elif weapon.Kind in ("IceAxe", "IceHammer", "IceSword", "TaiSword"):
  247.         auraparams=(10, 1, 1, 0, 0, 1)
  248.         auragradient=(2, 0.9, 1.0, 1.0, 0.2, 0.1, 0.4, 0.8, 1.0, 0.2, 1.0)
  249.         prtldata=("Vaho", 20, (0.0, 0.0, 0.0), 0.0, 1.0, 150.0, 0.02, 0.0, 60)
  250.         lightdata=()
  251.         weapon.SelfIlum=0.2
  252.         weapon.Alpha=0.99
  253.         weapon.RasterMode="AdditiveAlpha"
  254.     elif weapon.Kind in ("BladeSword2", "BladeSword2Barbarian"):
  255.         auraparams=(80, 1, 1, 0, 0, 1)
  256.         auragradient=(2, 0.8, 0.9, 1.0, 0.6, 0.0, 0.3, 0.4, 0.9, 0.0, 0.6)
  257.         prtldata=("BrillosBladeSword", 15, (0.0, 0.0, 0.0), 0.0, 0.0, 0.0, 0.01, 0.0, 6)
  258.         lightdata=(1.0, (235, 245, 255), 0)
  259.         weapon.SelfIlum=0.8
  260.     else:
  261.         print "No hay efecto definido para este tipo de arma!"
  262.         return
  263.     data.WeaponFX=WeaponFX(WeaponName, auraparams, auragradient, prtldata, lightdata)
  264.  
  265.  
  266.  
  267. #############################################
  268. #     Efectos visuales de algunos items     #
  269. #############################################
  270.  
  271.  
  272. class PersonItemFX:
  273.  
  274.     def __init__(self, PersonName, ItemName, TimeEffect):
  275.         pers=Bladex.GetEntity(PersonName)
  276.         item=Bladex.GetEntity(ItemName)
  277.         time=Bladex.GetTime()
  278.         self.PersonName=PersonName
  279.         self.ItemName=ItemName
  280.  
  281.         AuraParams0=(240, 0.01, 1.0, 0, 1, 1)
  282.         AuraParams1=(50 , 1.0 , 1.0, 0, 1, 1)
  283.         AuraParams2=(40 , 0.6 , 1.0, 0, 1, 1)
  284.  
  285.         XtraParam0=('Bladex.GetEntity("'+PersonName+'").SelfIlum', 0.0)
  286.         XtraParam1=('Bladex.GetEntity("'+PersonName+'").SelfIlum', 0.6)
  287.         XtraParam2=('Bladex.GetEntity("'+PersonName+'").SelfIlum', 0.1)
  288.  
  289.         if item.Kind=="PowerPotion":
  290.  
  291.             AuraGradient0=(2,  0.2, 0.4, 0.8, 1.0, 0.2  ,  0.0, 0.2, 0.8, 0.0, 0.7)
  292.             AuraGradient1=(2,  0.8, 0.9, 1.0, 1.0, 0.2  ,  0.0, 0.2, 0.9, 0.1, 1.0)
  293.  
  294.             self.Aura=Auras.MakeAura(PersonName, TimeEffect, AuraParams0, (), (), AuraGradient0  ,  1,  XtraParam0)
  295.             self.Aura.Data.AddEvent (time+1.0,               AuraParams1, (), (), AuraGradient1  ,  1,  XtraParam1)
  296.             self.Aura.Data.AddEvent (time+TimeEffect-4.1,    AuraParams1, (), (), AuraGradient1  ,  1,  XtraParam1)
  297.             self.Aura.Data.AddEvent (time+TimeEffect-3.6,    AuraParams2, (), (), AuraGradient1  ,  1,  XtraParam2)
  298.             self.Aura.Data.AddEvent (time+TimeEffect-3.1,    AuraParams1, (), (), AuraGradient1  ,  1,  XtraParam1)
  299.             self.Aura.Data.AddEvent (time+TimeEffect-2.7,    AuraParams2, (), (), AuraGradient1  ,  1,  XtraParam2)
  300.             self.Aura.Data.AddEvent (time+TimeEffect-2.3,    AuraParams1, (), (), AuraGradient1  ,  1,  XtraParam1)
  301.             self.Aura.Data.AddEvent (time+TimeEffect-2.0,    AuraParams2, (), (), AuraGradient1  ,  1,  XtraParam2)
  302.             self.Aura.Data.AddEvent (time+TimeEffect-1.7,    AuraParams1, (), (), AuraGradient1  ,  1,  XtraParam1)
  303.             self.Aura.Data.AddEvent (time+TimeEffect-1.5,    AuraParams2, (), (), AuraGradient1  ,  1,  XtraParam2)
  304.             self.Aura.Data.AddEvent (time+TimeEffect-1.3,    AuraParams1, (), (), AuraGradient1  ,  1,  XtraParam1)
  305.             self.Aura.Data.AddEvent (time+TimeEffect-1.2,    AuraParams2, (), (), AuraGradient1  ,  1,  XtraParam2)
  306.             self.Aura.Data.AddEvent (time+TimeEffect-1.1,    AuraParams1, (), (), AuraGradient1  ,  1,  XtraParam1)
  307.             self.Aura.Data.AddEvent (time+TimeEffect-1.05,   AuraParams2, (), (), AuraGradient1  ,  1,  XtraParam2)
  308.             self.Aura.Data.AddEvent (time+TimeEffect-1.0,    AuraParams1, (), (), AuraGradient1  ,  1,  XtraParam1)
  309.             self.Aura.Data.AddEvent (time+TimeEffect,        AuraParams0, (), (), AuraGradient0  ,  1,  XtraParam0)
  310.  
  311.         elif item.Kind=="Brazalete":
  312.  
  313.             AuraGradient0=(2,  0.8, 0.6, 0.0, 1.0, 0.2  ,  0.4, 0.3, 0.0, 0.0, 0.7)
  314.             AuraGradient1=(2,  1.0, 0.9, 0.5, 1.0, 0.1  ,  0.4, 0.3, 0.0, 0.0, 1.0)
  315.  
  316.             self.Aura=Auras.MakeAura(PersonName, TimeEffect, AuraParams0, (), (), AuraGradient0  ,  1,  XtraParam0)
  317.             self.Aura.Data.AddEvent (time+1.0,               AuraParams1, (), (), AuraGradient1  ,  1,  XtraParam1)
  318.             self.Aura.Data.AddEvent (time+TimeEffect-4.1,    AuraParams1, (), (), AuraGradient1  ,  1,  XtraParam1)
  319.             self.Aura.Data.AddEvent (time+TimeEffect-3.6,    AuraParams2, (), (), AuraGradient1  ,  1,  XtraParam2)
  320.             self.Aura.Data.AddEvent (time+TimeEffect-3.1,    AuraParams1, (), (), AuraGradient1  ,  1,  XtraParam1)
  321.             self.Aura.Data.AddEvent (time+TimeEffect-2.7,    AuraParams2, (), (), AuraGradient1  ,  1,  XtraParam2)
  322.             self.Aura.Data.AddEvent (time+TimeEffect-2.3,    AuraParams1, (), (), AuraGradient1  ,  1,  XtraParam1)
  323.             self.Aura.Data.AddEvent (time+TimeEffect-2.0,    AuraParams2, (), (), AuraGradient1  ,  1,  XtraParam2)
  324.             self.Aura.Data.AddEvent (time+TimeEffect-1.7,    AuraParams1, (), (), AuraGradient1  ,  1,  XtraParam1)
  325.             self.Aura.Data.AddEvent (time+TimeEffect-1.5,    AuraParams2, (), (), AuraGradient1  ,  1,  XtraParam2)
  326.             self.Aura.Data.AddEvent (time+TimeEffect-1.3,    AuraParams1, (), (), AuraGradient1  ,  1,  XtraParam1)
  327.             self.Aura.Data.AddEvent (time+TimeEffect-1.2,    AuraParams2, (), (), AuraGradient1  ,  1,  XtraParam2)
  328.             self.Aura.Data.AddEvent (time+TimeEffect-1.1,    AuraParams1, (), (), AuraGradient1  ,  1,  XtraParam1)
  329.             self.Aura.Data.AddEvent (time+TimeEffect-1.05,   AuraParams2, (), (), AuraGradient1  ,  1,  XtraParam2)
  330.             self.Aura.Data.AddEvent (time+TimeEffect-1.0,    AuraParams1, (), (), AuraGradient1  ,  1,  XtraParam1)
  331.             self.Aura.Data.AddEvent (time+TimeEffect,        AuraParams0, (), (), AuraGradient0  ,  1,  XtraParam0)
  332.  
  333.         elif item.Kind=="Corona":
  334.  
  335.             AuraGradient0=(2,  1.0, 0.4, 0.0, 1.0, 0.2  ,  1.0, 0.0, 0.0, 0.0, 0.7)
  336.             AuraGradient1=(2,  1.0, 0.7, 0.0, 1.0, 0.1  ,  1.0, 0.0, 0.0, 0.0, 1.0)
  337.  
  338.             self.Aura=Auras.MakeAura(PersonName, TimeEffect, AuraParams0, (), (), AuraGradient0  ,  1,  XtraParam0)
  339.             self.Aura.Data.AddEvent (time+1.0,               AuraParams1, (), (), AuraGradient1  ,  1,  XtraParam1)
  340.             self.Aura.Data.AddEvent (time+TimeEffect-4.1,    AuraParams1, (), (), AuraGradient1  ,  1,  XtraParam1)
  341.             self.Aura.Data.AddEvent (time+TimeEffect-3.6,    AuraParams2, (), (), AuraGradient1  ,  1,  XtraParam2)
  342.             self.Aura.Data.AddEvent (time+TimeEffect-3.1,    AuraParams1, (), (), AuraGradient1  ,  1,  XtraParam1)
  343.             self.Aura.Data.AddEvent (time+TimeEffect-2.7,    AuraParams2, (), (), AuraGradient1  ,  1,  XtraParam2)
  344.             self.Aura.Data.AddEvent (time+TimeEffect-2.3,    AuraParams1, (), (), AuraGradient1  ,  1,  XtraParam1)
  345.             self.Aura.Data.AddEvent (time+TimeEffect-2.0,    AuraParams2, (), (), AuraGradient1  ,  1,  XtraParam2)
  346.             self.Aura.Data.AddEvent (time+TimeEffect-1.7,    AuraParams1, (), (), AuraGradient1  ,  1,  XtraParam1)
  347.             self.Aura.Data.AddEvent (time+TimeEffect-1.5,    AuraParams2, (), (), AuraGradient1  ,  1,  XtraParam2)
  348.             self.Aura.Data.AddEvent (time+TimeEffect-1.3,    AuraParams1, (), (), AuraGradient1  ,  1,  XtraParam1)
  349.             self.Aura.Data.AddEvent (time+TimeEffect-1.2,    AuraParams2, (), (), AuraGradient1  ,  1,  XtraParam2)
  350.             self.Aura.Data.AddEvent (time+TimeEffect-1.1,    AuraParams1, (), (), AuraGradient1  ,  1,  XtraParam1)
  351.             self.Aura.Data.AddEvent (time+TimeEffect-1.05,   AuraParams2, (), (), AuraGradient1  ,  1,  XtraParam2)
  352.             self.Aura.Data.AddEvent (time+TimeEffect-1.0,    AuraParams1, (), (), AuraGradient1  ,  1,  XtraParam1)
  353.             self.Aura.Data.AddEvent (time+TimeEffect,        AuraParams0, (), (), AuraGradient0  ,  1,  XtraParam0)
  354.  
  355.         else: # para item.Kind=="Amuletofantasma"
  356.  
  357.             AuraGradient0=(2,  0.0, 1.0, 0.4, 1.0, 0.2  ,  0.0, 0.8, 0.0, 0.0, 0.7)
  358.             AuraGradient1=(2,  0.0, 1.0, 0.7, 1.0, 0.1  ,  0.0, 0.6, 0.0, 0.0, 1.0)
  359.  
  360.             self.Aura=Auras.MakeAura(PersonName, TimeEffect, AuraParams0, (), (), AuraGradient0  ,  1,  XtraParam0)
  361.             self.Aura.Data.AddEvent (time+1.0,               AuraParams1, (), (), AuraGradient1  ,  1,  XtraParam1)
  362.             self.Aura.Data.AddEvent (time+TimeEffect-4.1,    AuraParams1, (), (), AuraGradient1  ,  1,  XtraParam1)
  363.             self.Aura.Data.AddEvent (time+TimeEffect-3.6,    AuraParams2, (), (), AuraGradient1  ,  1,  XtraParam2)
  364.             self.Aura.Data.AddEvent (time+TimeEffect-3.1,    AuraParams1, (), (), AuraGradient1  ,  1,  XtraParam1)
  365.             self.Aura.Data.AddEvent (time+TimeEffect-2.7,    AuraParams2, (), (), AuraGradient1  ,  1,  XtraParam2)
  366.             self.Aura.Data.AddEvent (time+TimeEffect-2.3,    AuraParams1, (), (), AuraGradient1  ,  1,  XtraParam1)
  367.             self.Aura.Data.AddEvent (time+TimeEffect-2.0,    AuraParams2, (), (), AuraGradient1  ,  1,  XtraParam2)
  368.             self.Aura.Data.AddEvent (time+TimeEffect-1.7,    AuraParams1, (), (), AuraGradient1  ,  1,  XtraParam1)
  369.             self.Aura.Data.AddEvent (time+TimeEffect-1.5,    AuraParams2, (), (), AuraGradient1  ,  1,  XtraParam2)
  370.             self.Aura.Data.AddEvent (time+TimeEffect-1.3,    AuraParams1, (), (), AuraGradient1  ,  1,  XtraParam1)
  371.             self.Aura.Data.AddEvent (time+TimeEffect-1.2,    AuraParams2, (), (), AuraGradient1  ,  1,  XtraParam2)
  372.             self.Aura.Data.AddEvent (time+TimeEffect-1.1,    AuraParams1, (), (), AuraGradient1  ,  1,  XtraParam1)
  373.             self.Aura.Data.AddEvent (time+TimeEffect-1.05,   AuraParams2, (), (), AuraGradient1  ,  1,  XtraParam2)
  374.             self.Aura.Data.AddEvent (time+TimeEffect-1.0,    AuraParams1, (), (), AuraGradient1  ,  1,  XtraParam1)
  375.             self.Aura.Data.AddEvent (time+TimeEffect,        AuraParams0, (), (), AuraGradient0  ,  1,  XtraParam0)
  376.  
  377.  
  378.     def __getstate__(self):
  379.         return (1,
  380.                 self.PersonName,
  381.                 self.ItemName,
  382.                 GameStateAux.SaveEntityAux(self.Aura),
  383.             )
  384.  
  385.  
  386.     def __setstate__(self,parm):
  387.         if parm[0]==1:
  388.             self.PersonName=parm[1]
  389.             self.ItemName=parm[2]
  390.             self.Aura=GameStateAux.LoadEntityAux(parm[3])
  391.         else:
  392.             print "ItemFX.__setstate__() -> Version mismatch"
  393.             self.PersonName=""
  394.             self.ItemName=""
  395.             self.Aura=""
  396.  
  397.  
  398.  
  399. def AddPersonItemFX(PersonName, ItemName, TimeEffect):
  400.     pers=Bladex.GetEntity(PersonName)
  401.     item=Bladex.GetEntity(ItemName)
  402.     if ((not item) or (item.Kind not in ("PowerPotion", "Amuletofantasma", "Brazalete", "Corona"))):
  403.         print "El item especificado no existe no hay efecto definido para este tipo de item!"
  404.         return
  405.     pers.Data.PersonItemFX=PersonItemFX(PersonName, ItemName, TimeEffect)
  406.  
  407.  
  408.  
  409.  
  410. ###############################
  411. #     Teletransportadores     #
  412. ###############################
  413.  
  414.  
  415. def ChangeRasterMode(ent_name, mode):
  416.     Bladex.GetEntity(ent_name).RasterMode=mode
  417.  
  418. def PersonMagicallyAppearing():
  419.     TimeEffect=2.0
  420.     time=Bladex.GetTime()
  421.     char=Bladex.GetEntity("Player1")
  422.     char.Alpha=0.01
  423.     char.RasterMode="Read"
  424.     Bladex.AddScheduledFunc(time+TimeEffect, ChangeRasterMode, ("Player1", "Full"))
  425.     AuxFuncs.FadeObject("Player1", 0.01, 1.0, 2.0)
  426.     if char.InvLeft<>"":
  427.         obj=Bladex.GetEntity(char.InvLeft)
  428.         obj.RasterMode="Read"
  429.         Bladex.AddScheduledFunc(time+TimeEffect, ChangeRasterMode, (char.InvLeft, "Full"))
  430.         AuxFuncs.FadeObject(char.InvLeft, 0.01, obj.Alpha, TimeEffect)
  431.     if char.InvRight<>"":
  432.         obj=Bladex.GetEntity(char.InvRight)
  433.         obj.RasterMode="Read"
  434.         Bladex.AddScheduledFunc(time+TimeEffect, ChangeRasterMode, (char.InvRight, "Full"))
  435.         AuxFuncs.FadeObject(char.InvRight, 0.01, obj.Alpha, TimeEffect)
  436.     if char.InvLeftBack<>"":
  437.         obj=Bladex.GetEntity(char.InvLeftBack)
  438.         obj.RasterMode="Read"
  439.         Bladex.AddScheduledFunc(time+TimeEffect, ChangeRasterMode, (char.InvLeftBack, "Full"))
  440.         AuxFuncs.FadeObject(char.InvLeftBack, 0.01, obj.Alpha, TimeEffect)
  441.     if char.InvRightBack<>"":
  442.         obj=Bladex.GetEntity(char.InvRightBack)
  443.         obj.RasterMode="Read"
  444.         Bladex.AddScheduledFunc(time+TimeEffect, ChangeRasterMode, (char.InvRightBack, "Full"))
  445.         AuxFuncs.FadeObject(char.InvRightBack, 0.01, obj.Alpha, TimeEffect)
  446.     AuraParams0=(240, 0.01, 1.0, 0, 1, 1)
  447.     AuraParams1=(50 , 1.0 , 1.0, 0, 1, 1)
  448.     AuraParams2=(50 , 0.01, 1.0, 0, 1, 1)
  449.     AuraGradient0=(2,  0.2, 0.4, 0.8, 1.0, 0.2  ,  0.0, 0.2, 0.8, 0.0, 0.7)
  450.     AuraGradient1=(2,  0.8, 0.9, 1.0, 1.0, 0.2  ,  0.0, 0.2, 0.9, 0.1, 1.0)
  451.     aura=Auras.MakeAura("Player1", TimeEffect, AuraParams0, (), (), AuraGradient0)
  452.     aura.Data.AddEvent (time+TimeEffect/2.0, AuraParams1, (), (), AuraGradient1)
  453.     aura.Data.AddEvent (time+TimeEffect, AuraParams2, (), (), AuraGradient0)
  454.     ps=Bladex.CreateEntity("PSPersonMagicallyAppearing", "Entity Particle System Dperson", 0.0, 0.0, 0.0)
  455.     ps.PersonName="Player1"
  456.     ps.ParticleType="FastEnergyConc"
  457.     ps.PPS=200
  458.     ps.YGravity=0.0
  459.     ps.Friction=0.0
  460.     ps.Velocity=0.0, 0.0, 0.0
  461.     ps.RandomVelocity=0.5
  462.     ps.NormalVelocity=-2.0
  463.     ps.Time2Live=30
  464.     ps.DeathTime=time+TimeEffect/2.0
  465.  
  466.  
  467. def PersonMagicallyDisappearing():
  468.     TimeEffect=2.0
  469.     time=Bladex.GetTime()
  470.     char=Bladex.GetEntity("Player1")
  471.     char.Alpha=1.0
  472.     char.RasterMode="Read"
  473.     AuxFuncs.FadeObject("Player1", 1.0, 0.01, TimeEffect)
  474.     if char.InvLeft<>"":
  475.         obj=Bladex.GetEntity(char.InvLeft)
  476.         obj.RasterMode="Read"
  477.         AuxFuncs.FadeObject(char.InvLeft, obj.Alpha, 0.01, TimeEffect)
  478.     if char.InvRight<>"":
  479.         obj=Bladex.GetEntity(char.InvRight)
  480.         obj.RasterMode="Read"
  481.         AuxFuncs.FadeObject(char.InvRight, obj.Alpha, 0.01, TimeEffect)
  482.     if char.InvLeftBack<>"":
  483.         obj=Bladex.GetEntity(char.InvLeftBack)
  484.         obj.RasterMode="Read"
  485.         AuxFuncs.FadeObject(char.InvLeftBack, obj.Alpha, 0.01, TimeEffect)
  486.     if char.InvRightBack<>"":
  487.         obj=Bladex.GetEntity(char.InvRightBack)
  488.         obj.RasterMode="Read"
  489.         AuxFuncs.FadeObject(char.InvRightBack, obj.Alpha, 0.01, TimeEffect)
  490.     AuraParams0=(240, 0.01, 1.0, 0, 1, 1)
  491.     AuraParams1=(50 , 1.0 , 1.0, 0, 1, 1)
  492.     AuraParams2=(50 , 0.01, 1.0, 0, 1, 1)
  493.     AuraGradient0=(2,  0.2, 0.4, 0.8, 1.0, 0.2  ,  0.0, 0.2, 0.8, 0.0, 0.7)
  494.     AuraGradient1=(2,  0.8, 0.9, 1.0, 1.0, 0.2  ,  0.0, 0.2, 0.9, 0.1, 1.0)
  495.     aura=Auras.MakeAura("Player1", TimeEffect, AuraParams2, (), (), AuraGradient0)
  496.     aura.Data.AddEvent (time+TimeEffect/2.0, AuraParams1, (), (), AuraGradient1)
  497.     aura.Data.AddEvent (time+TimeEffect, AuraParams0, (), (), AuraGradient0)
  498.     ps=Bladex.CreateEntity("PSPersonMagicallyAppearing", "Entity Particle System Dperson", 0.0, 0.0, 0.0)
  499.     ps.PersonName="Player1"
  500.     ps.ParticleType="EnergyDissip"
  501.     ps.PPS=200
  502.     ps.YGravity=0.0
  503.     ps.Friction=0.0
  504.     ps.Velocity=0.0, 0.0, 0.0
  505.     ps.RandomVelocity=0.5
  506.     ps.NormalVelocity=2.0
  507.     ps.Time2Live=60
  508.     ps.DeathTime=time+TimeEffect/3.0
  509.  
  510.  
  511.  
  512. class MagicTransport:
  513.  
  514.     def __init__(self, trsector_name, magictr_position):
  515.         self.Position=x, y, z=magictr_position
  516.         self.TrSectorMax=trsector_name
  517.         self.TrSectorMin=trsector_name+"_In"
  518.         self.MagicCilinder=Bladex.CreateEntity(trsector_name+"_Cil", "CilindroTransportador", x, y, z)
  519.         self.MagicCilinder.Orientation=0.707107,0.707107,0.000000,0.000000
  520.         self.MagicCilinder.Scale=0.1
  521.         self.MagicCilinder.Alpha=0.0
  522.         self.MagicCilinder.CastShadows=0
  523.         self.AGE_Number=0
  524.         Bladex.AddTriggerSector(trsector_name+"_In", "Transportadores", y+1150.0, y-1150.0, [(x+500.0, z+500.0), (x-500.0, z+500.0), (x-500.0, z-500.0), (x+500.0, z-500.0)])
  525.         Bladex.SetTriggerSectorFunc(trsector_name+"_In", "OnEnter", self.UseMagicTransport)
  526.         Bladex.SetTriggerSectorFunc(trsector_name, "OnEnter", self.OpenMagicTransport)
  527.         Bladex.SetTriggerSectorFunc(trsector_name, "OnLeave", self.CloseMagicTransport)
  528.         self.ObjId=ObjStore.GetNewId()
  529.         ObjStore.ObjectsStore[self.ObjId]=self
  530.  
  531.     def persistent_id(self):
  532.         return self.ObjId
  533.  
  534.     def __getstate__(self):
  535.         return (1,
  536.               self.ObjId,
  537.               self.Position,
  538.               self.TrSectorMax,
  539.               self.TrSectorMin,
  540.               self.AGE_Number,
  541.               GameStateAux.SaveEntityAux(self.MagicCilinder)
  542.              )
  543.  
  544.     def __setstate__(self,parm):
  545.         if parm[0]==1:
  546.             self.ObjId=parm[1]
  547.             ObjStore.ObjectsStore[self.ObjId]=self
  548.             self.Position=parm[2]
  549.             self.TrSectorMax=parm[3]
  550.             self.TrSectorMin=parm[4]
  551.             self.AGE_Number=parm[5]
  552.             self.MagicCilinder=GameStateAux.LoadEntityAux(parm[6])
  553.         else:
  554.             print "MagicTransport.__setstate__() -> Version mismatch"
  555.             self.ObjId=ObjStore.GetNewId()
  556.             ObjStore.ObjectsStore[self.ObjId]=self
  557.             self.Position=""
  558.             self.TrSectorMax=""
  559.             self.TrSectorMin=""
  560.             self.AGE_Number=""
  561.             self.MagicCilinder=""
  562.  
  563.     def RotateMagicCilinderGrad(self, obj_name, time):
  564.         self.MagicCilinder.RotateRel(0, 0, 0, 0, 0, 1, 0.08)
  565.  
  566.     def RotateMagicCilinder(self):
  567.         self.MagicCilinder.TimerFunc=self.RotateMagicCilinderGrad
  568.         self.MagicCilinder.SubscribeToList("Timer30")
  569.  
  570.     def OpenMagicTransport(self, trsector, ent_name):
  571.         import GameText
  572.         AuxFuncs.ScaleObjectV2(self.MagicCilinder.Name, self.MagicCilinder.Scale, 1.0, -1, 2.0, self.RotateMagicCilinderGrad, (0 ,0), self.RotateMagicCilinder, (), 0)
  573.         self.AGE_Number=self.AGE_Number+1
  574.         openps=Bladex.CreateEntity(self.MagicCilinder.Name+"_PS_"+`self.AGE_Number`, "Entity Particle System Dobj", 0.0, 0.0, 0.0)
  575.         openps.ObjectName=self.MagicCilinder.Name
  576.         openps.ParticleType="LittleEnergyDissip"
  577.         openps.PPS=600
  578.         openps.YGravity=0.0
  579.         openps.Friction=0.0
  580.         openps.Velocity=0.0, 0.0, 0.0
  581.         openps.RandomVelocity=0.0
  582.         openps.NormalVelocity=0.0
  583.         openps.Time2Live=30
  584.         GameText.ShowMessage("Entra en el transportador para abandonar el mapa")
  585.  
  586.     def CloseMagicTransport(self, trsector, ent_name):
  587.         import GameText
  588.         openps=Bladex.GetEntity(self.MagicCilinder.Name+"_PS_"+`self.AGE_Number`)
  589.         if openps:
  590.             openps.DeathTime=Bladex.GetTime()+2.0
  591.             AuxFuncs.ScaleObjectV2(self.MagicCilinder.Name, self.MagicCilinder.Scale, 0.1, 1, 2.0, self.RotateMagicCilinderGrad, (0 ,0), "", (), 0)
  592.             GameText.HideMessage()
  593.  
  594.     def UseMagicTransport(self, trsector, ent_name):
  595.         import GotoMapVars
  596.         import Scorer
  597.         Bladex.RemoveTriggerSectorFunc(trsector, "OnEnter")
  598.         Bladex.DeactivateInput()
  599.         Scorer.SetVisible(0)
  600.         PersonMagicallyDisappearing()
  601.         self.CloseMagicTransport(0, 0)
  602.         Bladex.AddScheduledFunc(Bladex.GetTime()+2.0, AuxFuncs.FadeTo, (2.0, 2.0))
  603.         Bladex.AddScheduledFunc(Bladex.GetTime()+4.0, GotoMapVars.EndOfLevel, ())
  604.  
  605.  
  606. def CreateMagicTransport(trsector_name, magictr_position):
  607.     magictr=MagicTransport(trsector_name, magictr_position)
  608.     return magictr
  609.  
  610.  
  611.  
  612.  
  613.  
  614. #######################################################################
  615. #     Funciones genericas para generacion de FX en ciertos golpes     #
  616. #######################################################################
  617.  
  618.  
  619. ####### Iluminacion
  620.  
  621. class LightFX:
  622.  
  623.     def __init__(self):
  624.         self.Entity="Player1"
  625.         self.TurnOnTime=1.0
  626.         self.TurnOffTime=1.0
  627.         self.QuickTurnOffTime=0.5
  628.         self.MaxIntensity=2.0
  629.         self.TimeMaxIntensity=2.0
  630.         self.Color=255, 255, 255
  631.         self.Flick=0
  632.  
  633.  
  634. def AddParticles(entity_source_name, prtl_type, pps, rnd_vel, normal_vel, friction, time2live, death_time):
  635.     ent_src=Bladex.GetEntity(entity_source_name)
  636.     if not ent_src:
  637.         print "La entidad especificada como fuente de las particulas no existe!!!"
  638.         return
  639.     id_number=int(10.0*Bladex.GetTime())
  640.     if ent_src.Person:
  641.         prtl_sys=Bladex.CreateEntity(entity_source_name+"prtlsys"+`id_number`, "Entity Particle System Dperson",0,0,0)
  642.         prtl_sys.PersonName=entity_source_name
  643.     else:
  644.         prtl_sys=Bladex.CreateEntity(entity_source_name+"prtlsys"+`id_number`, "Entity Particle System Dobj",0,0,0)
  645.         prtl_sys.ObjectName=entity_source_name
  646.     prtl_sys.ParticleType=prtl_type
  647.     prtl_sys.Time2Live=time2live
  648.     prtl_sys.PPS=pps
  649.     prtl_sys.NormalVelocity=normal_vel
  650.     prtl_sys.RandomVelocity=rnd_vel
  651.     prtl_sys.Friction=friction
  652.     prtl_sys.YGravity=0
  653.     prtl_sys.Velocity=0, 0, 0
  654.     if death_time:
  655.         prtl_sys.DeathTime=Bladex.GetTime()+death_time
  656.     return prtl_sys
  657.  
  658.  
  659. def ModifyParticles(prtl_sys, new_pps, new_rnd_vel, new_normal_vel, new_friction, new_time2live, new_death_time):
  660.     prtl_sys.Time2Live=new_time2live
  661.     prtl_sys.PPS=new_pps
  662.     prtl_sys.NormalVelocity=new_normal_vel
  663.     prtl_sys.RandomVelocity=new_rnd_vel
  664.     prtl_sys.Friction=new_friction
  665.     if new_death_time:
  666.         prtl_sys.DeathTime=Bladex.GetTime()+new_death_time
  667.  
  668.  
  669. def PlaySoundFX(sound, entity_source_name, volume, pitch):
  670.     ent_src=Bladex.GetEntity(entity_source_name)
  671.     if not ent_src:
  672.         print "La entidad especificada como fuente del sonido no existe!!!"
  673.         return
  674.     sound.Volume=volume
  675.     sound.Pitch=pitch
  676.     sound.Position=ent_src.Position
  677.     sound.PlaySound(0)
  678.  
  679.  
  680. def InflictDamageFX(VictimName, aura_size_var=250.0, aura_exp_time=0.7, r=10, g=50, b=240, light_intensity=0.0, sound=None, volume=1.0, pitch=1.0):
  681.     victim=Bladex.GetEntity(VictimName)
  682.     x, y, z=victim.Position
  683.     ar=r/255.0
  684.     ag=g/255.0
  685.     ab=b/255.0
  686.     r1=ar+(1.0-ar)/1.5
  687.     g1=ag+(1.0-ag)/1.5
  688.     b1=ab+(1.0-ab)/1.5
  689.     dif=min(ar, ag, ab)
  690.     r2=ar-dif
  691.     g2=ag-dif
  692.     b2=ab-dif
  693.     time=Bladex.GetTime()
  694.     aura=Auras.MakeAura(VictimName,aura_exp_time,   (1                    , 0.01, 1.0, 0, 0, 1), (), (), (2,  r1, g1, b1, 0.6, 0.3  ,  ar, ag, ab, 0.4, 1.0))
  695.     aura.Data.AddEvent(time+aura_exp_time/4.0   ,   (2.0*aura_size_var/3.0, 1.0 , 1.0, 0, 0, 1), (), (), (2,  r1, g1, b1, 0.6, 0.3  ,  ar, ag, ab, 0.4, 1.0))
  696.     aura.Data.AddEvent(time+aura_exp_time       ,   (aura_size_var        , 0.01, 1.0, 0, 0, 1), (), (), (2,  ar, ag, ab, 0.6, 0.4  ,  r2, g2, b2, 0.4, 0.5))
  697.     if light_intensity:
  698.         id_number=int(10.0*Bladex.GetTime())
  699.         limp=Bladex.CreateEntity(VictimName+"ImpactLight"+`id_number`, "Entity Spot", x, y, z)
  700.         limp.Color=r, g, b
  701.         limp.Intensity=light_intensity
  702.         limp.Precission=0.01
  703.         limp.CastShadows=0
  704.         limp.Visible=0
  705.         limp.Flick=0
  706.         AuxFuncs.SpotIntensityVariation(limp.Name, light_intensity, 0.0, aura_exp_time, 1, 0.0, 0.0, "Timer30", 30)
  707.     if sound:
  708.         sound.Volume=volume
  709.         sound.Pitch=pitch
  710.         sound.Play(x, y, z, 0)
  711.